package com.qkjia.zqkspringshell.demo;

import jdk.jfr.internal.JVM;
import org.jline.utils.AttributedString;
import org.jline.utils.AttributedStyle;
import org.springframework.shell.jline.PromptProvider;
import org.springframework.stereotype.Component;

import javax.swing.*;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * SpringShell 应用默认的命令提示符是 Shell:>, Spring 提供了PromptProvider 接口, 可以让我们轻松自定义自己的命令提示符. 这样会让我们的应用看起来更专业. 自定义命令提示符的方式也很简单, 只需自定义PromptProvider 实现类即可.
 *
 * 1. 自定义命令提示符
 * 自定义命令提示符需要注册为spring的组件, 添加@Component修饰即可
 * 自定义提示符需要实现PromptProvider接口, 并实现getPrompt()方法
 * 在getPrompt()方法中,我们可以指定命令提示符的文字, 字体样式, 前景色, 背景色等信息

 */
@Component
public class ZidingyiMingLingTIshiFu implements PromptProvider {

    @Override
    public AttributedString getPrompt() {

        // 获取主机名称
        String hostName = getHostName();

        // 设置命令提示符文字
        String promot = "spring@" + hostName + "> ";

        // 设置命令提示符字体样式
        AttributedStyle promotStyle = AttributedStyle.BOLD.foreground(AttributedStyle.GREEN);

        // 返回命令提示符
        return new AttributedString(promot, promotStyle);
    }

    /**
     * @Description: 获取主机名称
     * @return: String 主机名称
     * @author: zongf
     * @time: 2019-01-26 08:58:45
     */
    private String getHostName(){
        String hostName = "";
        try {
            InetAddress inetAddress = InetAddress.getLocalHost();
            hostName = inetAddress.getHostName();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return hostName;
    }
/*
    启动测试
    重新打包后启动应用, 会发现命令提示符已变.

            $ ./bin/spring-shell.sh

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
            ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
            \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
            '  |____| .__|_| |_|_| |_\__, | / / / /
            =========|_|==============|___/=/_/_/_/
            :: Spring Boot ::        (v2.1.2.RELEASE)

            2019-01-26 10:02:37.709[INFO][main]-Starting SpringShellApplication v0.0.1-SNAPSHOT on zongf-E570 with PID 23568 (/data/idea/learn-spring/spring-shell/target/spring-shell-0.0.1-SNAPSHOT.jar started by zongf in /data/idea/learn-spring/spring-shell/target)
            2019-01-26 10:02:37.716[INFO][main]-No active profile set, falling back to default profiles: default
2019-01-26 10:02:39.021[INFO][main]-Started SpringShellApplication in 1.957 seconds (JVM running for 2.426)
    spring@zongf-E570> add 2 3
            5
    spring@zongf-E570>*/
}

